"""
@Author : 合肥一元数智教育科技有限公司
@Date :  2025/5/27 10:27
@Description : 
python在类的继承后 如果希望子类需要必须覆盖父类中的某些方法 那么可以父类中的方法设计为抽象方法

1. 方法上添加装饰器 @abstractmethod  独立添加该装饰器没有效果
2. 将类设计为抽象类  python中没有直接将类声明为抽象类的做法   内置抽象模块 ABC  继承方式

"""
from abc import abstractmethod, ABC


# Animal 抽象类
class Animal(ABC):

    @abstractmethod  # 抽象方法
    def hoot(self):
        pass


class Dog(Animal):
    def hoot(self):
        print('汪汪叫')

    pass


class Cat(Animal):
    def hoot(self):
        print('喵喵叫')

    pass


if __name__ == '__main__':
    #  TypeError: Can't instantiate abstract class Dog with abstract method hoot   无法实例化Dog  Dog类中包含抽象方法
    # dog = Dog()
    # dog.hoot()
    # cat = Cat()
    # cat.hoot()

    animal: Animal = Cat()
    #  animal能调用什么 看左边数据类型 具体的执行看右边数据类型
    animal.hoot()
